package com.project.app;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.JsResult;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

import com.project.app.bean.AndroidToJs;

import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.ViewById;

@EActivity
public class AndroidCallJsActivity extends AppCompatActivity {

    @ViewById(R.id.web_View)
    WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_call_js);

//        webView = findViewById(R.id.web_View);
        WebSettings webSettings = webView.getSettings();
        /** 允许与js交互*/
        webSettings.setJavaScriptEnabled(true);
        /** 允许JS弹窗*/
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        webView.loadData("","text/html","UTF-8");
        webView.addJavascriptInterface(new AndroidToJs(),"test");

        webView.loadUrl("file:///android_asset/web_call_js.html");
//        webView.loadUrl("https://www.baidu.com");
//        webView.setWebViewClient(new MyWebViewClient());


        // 由于设置了弹窗检验调用结果,所以需要支持js对话框
        // webview只是载体，内容的渲染需要使用webviewChromClient类去实现
        // 通过设置WebChromeClient对象处理JavaScript的对话框
        //设置响应js 的Alert()函数
        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
                AlertDialog.Builder b = new AlertDialog.Builder(AndroidCallJsActivity.this);
                b.setTitle("Alert");
                b.setMessage(message);
                b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        result.confirm();
                    }
                });
                b.setCancelable(false);
                b.create().show();
                return true;
            }

        });
    }

    @Click({R.id.btn_callJs,R.id.btn_callJs2,R.id.btn_callJswithParme})
    public void  onClick(View view){
        switch (view.getId()){
            case R.id.btn_callJs://第一种方法：webView的loadUrl（）；
                webView.post(new Runnable() {
                    @Override
                    public void run() {
                        // 注意调用的JS方法名要对应上
                        // 调用javascript的callJS()方法
                        // 对于evaluateJavascript 头部可以添加标识javascript: 可以不添加
                        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){//Android API 大于 19
                            webView.evaluateJavascript("callJS()",null);
                        }else {
                            webView.loadUrl("javascript:callJS()");
                        }

                    }
                });

                break;
            case R.id.btn_callJs2://第二种方法：evaluateJavascript
                // 因为该方法的执行不会使页面刷新，而第一种方法（loadUrl ）的执行则会。 Android 4.4 后才可使用
                webView.post(new Runnable() {
                    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
                    @Override
                    public void run() {
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
                            // 对于evaluateJavascript 头部可以添加标识javascript: 可以不添加
                            webView.evaluateJavascript("javascript:callJS2('Eric')", null);
                        }else {
                            webView.loadUrl("javascript:callJS2('Eric')");
                        }

                    }
                });
                break;
            case R.id.btn_callJswithParme:
                final String text = "Eric";
                webView.post(new Runnable() {
                    @Override
                    public void run() {
                        webView.post(new Runnable() {
                            @RequiresApi(api = Build.VERSION_CODES.KITKAT)
                            @Override
                            public void run() {
                                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
                                    // 对于evaluateJavascript 头部可以添加标识javascript: 可以不添加
                                    webView.evaluateJavascript("javascript:callJS3('Eric')", new ValueCallback<String>() {
                                        @Override
                                        public void onReceiveValue(final String s) {
                                            runOnUiThread(new Runnable() {
                                                @Override
                                                public void run() {
                                                    Toast.makeText(AndroidCallJsActivity.this, s, Toast.LENGTH_SHORT).show();
                                                }
                                            });
                                        }
                                    });
                                }else {
                                    webView.loadUrl("javascript:callJS3('Eric')");
                                }

                            }
                        });
                    }
                });
                break;

        }
    }



    private void loadUrl(){
        // Android版本变量
        final int version = Build.VERSION.SDK_INT;
        // 因为该方法在 Android 4.4 版本才可使用，所以使用时需进行版本判断
        if (version < 18) {
            webView.loadUrl("javascript:callJS()");
        } else {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                webView.evaluateJavascript("javascript:callJS()", new ValueCallback<String>() {
                    @Override
                    public void onReceiveValue(String s) {

                    }
                });
            }
        }
    }


    private class MyWebViewClient extends WebViewClient{

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            webView.loadUrl(url);
        }
    }



}
